
import json
import os

# Save the custom table information to a JSON file


def save_table_info_to_json(table_info, file_path):
    """
    Save custom table info dictionary to a JSON file

    Parameters:
    table_info (dict): Dictionary containing table information
    file_path (str): Path where to save the JSON file
    """
    try:
        with open(file_path, 'w', encoding='utf-8') as json_file:
            json.dump(table_info, json_file, ensure_ascii=False, indent=4)
        print(f"Successfully saved table info to {file_path}")
    except Exception as e:
        print(f"Error saving JSON file: {e}")

    # Read the custom table information from a JSON file


def load_table_info_from_json(file_path):
    """
    Load custom table info from a JSON file

    Parameters:
    file_path (str): Path to the JSON file

    Returns:
    dict: Dictionary containing table information
    """
    try:
        with open(file_path, 'r', encoding='utf-8') as json_file:
            table_info = json.load(json_file)
        print(f"Successfully loaded table info from {file_path}")
        return table_info
    except Exception as e:
        print(f"Error loading JSON file: {e}")
        return None

    # Example usage:


if __name__ == "__main__":
    # Define your custom_table_info dictionary
    custom_table_info = {
    'BAYONET_BASICS.SYS_BAYONET': """
        BAYONET_BASICS.SYS_BAYONET(
            ID VARCHAR2 PRIMARY KEY, /* 卡口唯一标识符 */
            NAME VARCHAR2, /* 卡口名称 */
            UNIT_ID VARCHAR2, /* 所属单位ID，关联到单位信息表 */
            DES VARCHAR2, /* 卡口描述信息 */
            PHOTODIR VARCHAR2, /* 照片存储目录 */
            PHOTOHTTP VARCHAR2, /* 照片HTTP访问路径 */
            EXTENT VARCHAR2, /* 卡口监控范围 */
            ENDPOINT VARCHAR2, /* 卡口终端点信息 */
            CROSSECTIONID VARCHAR2, /* 交叉路口ID */
            DISTANCETYPE VARCHAR2 /* 距离类型 */
        )
        该表为船舶监控系统的基础配置表，记录了所有船舶监控卡口的详细信息。
        作为核心基础表，多个业务表通过BAYONET_ID字段与此表关联。
    """,

    'BAYONET_DYNAMIC.DATAFUSION': """
        BAYONET_DYNAMIC.DATAFUSION(
            CODE VARCHAR2 PRIMARY KEY, /* 唯一标识符，与BOAT_WARNING和OFF_SITE_CASE表的EVENTCODE字段关联 */
            BOAT_NAME VARCHAR2, /* 船舶名称 */
            PASSTIME TIMESTAMP, /* 通过卡口时间 */
            DIRECTION VARCHAR2, /* 船舶行进方向 */
            LENGTH NUMBER, /* 船舶长度 */
            WIDTH NUMBER, /* 船舶宽度 */
            HEIGHT NUMBER, /* 船舶高度 */
            HEIGHTEST NUMBER, /* 最高点高度 */
            LOAD NUMBER, /* 载重量 */
            SPEED NUMBER, /* 航行速度 */
            BAYONET_ID VARCHAR2 /* 关联到BAYONET_BASICS.SYS_BAYONET表的ID字段 */
        )
        该表记录船舶通过卡口时的基本信息、物理特征以及监测状态。
        此表是系统中船舶数据的主要来源，多个业务表通过CODE字段与此表关联。
    """,

    'BAYONET_DYNAMIC.VIDEO_ANALYSIS': """
        BAYONET_DYNAMIC.VIDEO_ANALYSIS(
            ID VARCHAR2 PRIMARY KEY, /* 视频分析记录ID */
            NAME VARCHAR2, /* 分析名称 */
            TIME TIMESTAMP, /* 分析时间 */
            DIRECT VARCHAR2, /* 方向 */
            PHOTONAME VARCHAR2, /* 图片名称 */
            IDENTITYTYPE VARCHAR2, /* 识别类型 */
            EVENTCODE VARCHAR2, /* 事件代码，关联到DATAFUSION表的CODE字段 */
            BAYONET_ID VARCHAR2 /* 关联到BAYONET_BASICS.SYS_BAYONET表的ID字段 */
        )
        该表记录视频监控设备对经过卡口的船舶进行图像分析的结果。
        通过EVENTCODE关联到船舶基本信息，通过BAYONET_ID关联到卡口信息。
    """,

    'BAYONET_BUSSINESS.BOAT_WARNING': """
        BAYONET_BUSSINESS.BOAT_WARNING(
            CODE VARCHAR2 PRIMARY KEY, /* 预警记录唯一标识 */
            EVENTCODE VARCHAR2, /* 关联到DATAFUSION表的CODE字段 */
            WARNCODE VARCHAR2, /* 预警代码，关联到MESSAGE_SEND_RECORD表 */
            BOAT_NAME VARCHAR2, /* 船舶名称 */
            WARNING_TIME TIMESTAMP, /* 预警时间 */
            WARNING_TYPE VARCHAR2, /* 预警类型，关联到ZD_WARNING_TYPE表的ID字段 */
            PASS_TIME TIMESTAMP, /* 船舶通过时间 */
            WARNING_DETAIL VARCHAR2, /* 预警详情 */
            WARNING_MESSAGE_STATUS VARCHAR2, /* 预警消息状态 */
        )
        该表管理船舶预警信息及处理流程。
        通过WARNING_TYPE关联预警类型表，通过EVENTCODE关联船舶基本信息。
        记录了预警从发生到处理的全过程时间节点及状态变化。
    """,

    'BAYONET_BUSSINESS.OFF_SITE_CASE': """
        BAYONET_BUSSINESS.OFF_SITE_CASE(
            TYPE VARCHAR2, /* 案件类型 */
            TYPE_STATE VARCHAR2, /* 类型状态 */
            EVENT_CODE VARCHAR2, /* 关联到DATAFUSION表的CODE字段 */
            REPORT_ID VARCHAR2, /* 报告ID */
            COVERAGE VARCHAR2, /* 覆盖范围 */
            BOAT_GOODS VARCHAR2, /* 船舶货物 */
            BOAT_COVERAG VARCHAR2, /* 船舶覆盖范围 */
            BAYONET_ID VARCHAR2, /* 关联到BAYONET_BASICS.SYS_BAYONET表的ID字段 */
            BOAT_TYPE VARCHAR2, /* 船舶类型 */
            BOAT_REGISTRY_PORT VARCHAR2, /* 船舶注册港口 */
            SHIP_OWNER VARCHAR2, /* 船主 */
            CONTACT_PHONE VARCHAR2, /* 联系电话 */
            OWNER_LEGAL VARCHAR2 /* 法定所有人 */
        )
        该表管理船舶相关的异地或场外案件处理流程。
        通过EVENT_CODE关联船舶基本信息，通过BAYONET_ID关联卡口信息。
        记录了案件的环境条件、船舶详情和所有者信息等。
    """,

    'BAYONET_BUSSINESS.ZD_WARNING_TYPE': """
        BAYONET_BUSSINESS.ZD_WARNING_TYPE(
            ID VARCHAR2 PRIMARY KEY, /* 预警类型ID，被BOAT_WARNING表的WARNING_TYPE字段引用 */
            NAME VARCHAR2, /* 预警类型名称 */
            BZ VARCHAR2 /* 备注说明 */
        )
        该表用于定义和管理系统中的预警类别，与BOAT_WARNING表关联，
        为预警系统提供标准化的预警类型定义。
    """
}

    # Define the file path
    file_path = "../oracle_table_info.json"

    # Save the table info to JSON
    save_table_info_to_json(custom_table_info, file_path)

    # Read the table info from JSON
    loaded_table_info = load_table_info_from_json(file_path)

    # Now you can use the loaded table info in your database connection code
    if loaded_table_info:
        # Example code to use with SQLDatabase
        """  
        db = SQLDatabase.from_uri(  
            uri,  
            sample_rows_in_table_info=2,  
            include_tables=['BAYONET_BASICS.SYS_BAYONET', 'BAYONET_DYNAMIC.DATAFUSION'],  
            custom_table_info=loaded_table_info  
        )  
        """

        # Print the first table info to verify it loaded correctly
        print("\nFirst table info from loaded data:")
        first_table = next(iter(loaded_table_info))
        print(f"{first_table}: {loaded_table_info[first_table][:100]}...")